home *** CD-ROM | disk | FTP | other *** search
- m4x3 r0, v0, c40 // r0 = position in light space (x,y,z)
- dp3 r1.x, r0, r0
- rsq r1.y, r1.x
- mul r1.z, r0.z, r1.y // r1.z = dot(normalize(r0), (0,0,1)) = normalize(r0).z
- mad r1.z, r1.z, c70.x, c70.y // remap to [1,0]
- max r1.z, r1.z, c70.z // clamp to 0
-
- rcp r1.w, r0.z // distance attenuation
- mul r1.w, r1.w, c70.w // r1.w = 0.2/z
- max r1.w, r1.w, c70.z // clamp to 0
-
- dp3 r1.y, v1, c60 // diffuse lighting (normal dot light_dir)
- max r1.y, r1.y, c70.z
-
- mul r1.z, r1.z, r1.w
- mul r1.z, r1.z, r1.y
- mul r2, c44, r1.z // mul by light color
-
- // spot 1
- m4x3 r0, v0, c45
- dp3 r1.x, r0, r0
- rsq r1.y, r1.x
- mul r1.z, r0.z, r1.y
- mad r1.z, r1.z, c70.x, c70.y
- max r1.z, r1.z, c70.z
-
- rcp r1.w, r0.z
- mul r1.w, r1.w, c70.w
- max r1.w, r1.w, c70.z
-
- dp3 r1.y, v1, c61
- max r1.y, r1.y, c70.z
-
- mul r1.z, r1.z, r1.w
- mul r1.z, r1.z, r1.y
- mad r2, c49, r1.z, r2
-
- // spot 2
- m4x3 r0, v0, c50
- dp3 r1.x, r0, r0
- rsq r1.y, r1.x
- mul r1.z, r0.z, r1.y
- mad r1.z, r1.z, c70.x, c70.y
- max r1.z, r1.z, c70.z
-
- rcp r1.w, r0.z
- mul r1.w, r1.w, c70.w
- max r1.w, r1.w, c70.z
-
- dp3 r1.y, v1, c62
- max r1.y, r1.y, c70.z
-
- mul r1.z, r1.z, r1.w
- mul r1.z, r1.z, r1.y
- mad r2, c54, r1.z, r2
-
- // spot 3
- m4x3 r0, v0, c55
- dp3 r1.x, r0, r0
- rsq r1.y, r1.x
- mul r1.z, r0.z, r1.y
- mad r1.z, r1.z, c70.x, c70.y
- max r1.z, r1.z, c70.z
-
- rcp r1.w, r0.z
- mul r1.w, r1.w, c70.w
- max r1.w, r1.w, c70.z
-
- dp3 r1.y, v1, c63
- max r1.y, r1.y, c70.z
-
- mul r1.z, r1.z, r1.w
- mul r1.z, r1.z, r1.y
- mad r2, c59, r1.z, r2
-
- mov oD0.xyz, r2
-